package Lee_code;

/**
 * @author blh
 * @date 2024年06月24日 10:47
 */
public class Lee_200_624 {
    int res = 0;
    int row, column;

    public int numIslands(char[][] grid) {
        row = grid.length;
        column = grid[0].length;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                if (grid[i][j] == '1') {
                    // 找到一片陆地
                    res++;
                    // 将该陆地淹没
                    dfs(grid, i, j);
                }
            }
        }
        return res;
    }

    private void dfs(char[][] grid, int i, int j) {
        // 将该块陆地淹没
        grid[i][j] = '0';
        // 向四个方向扩散
        // 向上
        if (i > 0 && grid[i - 1][j] == '1') {
            dfs(grid, i - 1, j);
        }
        // 向下
        if (i < row - 1 && grid[i - 1][j] == '1') {
            dfs(grid, i + 1, j);
        }
        // 向左
        if (j > 0 && grid[i][j - 1] == '1') {
            dfs(grid, i, j - 1);
        }
        // 向右
        if (j < column - 1 && grid[i][j + 1] == '1') {
            dfs(grid, i, j + 1);
        }
    }
}
